Pixel Formats topic

A PixelFormat is a description of how pixel data is stored in memory. It includes a set of standard properties and rules for how to interpret the data, such as how many bytes are used to store each pixel, canonical (zero or max) values, and conversion rules to and from other formats.

Pxl ships with a number of built-in pixel formats, and can be extended with additional formats:

const myFormat = const MyFormat._();

//                         Pixel data type    Channel data type
//                                       v    v
final class MyFormat extends PixelFormat<int, int> {
  const MyFormat._();

  @override
  int get bytesPerPixel => 4;

  @override
  int get zero => 0;

  // ... rest of the class implementation
}

Integer pixel formats

All integer formats use the ABGR 32-bit format as a common intermediate for conversions; channels that are larger or smaller than 8 bits are scaled to fit within the 8-bit range. For example a 4-bit channel value of 0x0F would be scaled to 0xFF when converting to 8-bit.

Name Bits per pixel Description
abgr8888 32 4 channels @ 8 bits each
argb8888 32 4 channels @ 8 bits each
gray8 8 1 channel @ 8 bits
rgba8888 32 4 channels @ 8 bits each

Grayscale formats use luminance values to represent color.

Floating-point pixel formats

All floating-point formats use the RGBA 128-bit format as a common intermediate for conversions; channels that are larger or smaller than 32 bits are scaled to fit within the 32-bit range. When converting to packed integer formats, data is normalized to the range [0.0, 1.0] and then scaled to fit within the integer range.

Name Bits per pixel Description
floatRgba 128 Red, Green, Blue, Alpha

Indexed pixel formats

IndexedFormats use a palette to map pixel values to colors.

The palette is stored as a separate array of colors, and the pixel data is stored as indices into the palette.

// Example of a 1-bit indexed format.
final mono1 = IndexedPixelFormat.bits8(
  const [0xFF000000, 0xFFFFFFFF],
  format: abgr8888,
);
Name Bits per pixel Description
system8 8 8 colors.
system256 8 256 colors (216 RGB + 40 grayscale).

Classes

Abgr8888 Pixel Formats
32-bit ABGR pixel format with four 8-bit channels.
Argb8888 Pixel Formats
32-bit ARGB pixel format with four 8-bit channels.
FloatRgba Pixel Formats
A 128-bit floating-point RGBA pixel format with four 32-bit channels.
Gray8 Pixel Formats
8-bit grayscale pixel format.
IndexedFormat<P> Pixel Formats
A pixel format that uses a predefined palette to index colors.
PixelFormat<P, C> Pixel Formats
Describes the organization and characteristics of pixel data P in memory.
Rgb<P, C> Pixel Formats
Base API for pixel formats that have red, green, and blue channels.
Rgb888 Pixel Formats
24-bit^1 RGB pixel format with three 8-bit channels.
Rgba<P, C> Pixel Formats
Base API for pixel formats that have red, green, blue, and alpha channels.

Mixins

Grayscale<P, C> Pixel Formats
A mixin for pixel formats that represent graysacle pixels.

Constants

abgr8888 → const Abgr8888 Pixel Formats
32-bit ABGR pixel format with four 8-bit channels.
argb8888 → const Argb8888 Pixel Formats
32-bit ARGB pixel format with four 8-bit channels.
floatRgba → const FloatRgba Pixel Formats
A 128-bit floating-point RGBA pixel format with four 32-bit channels.
gray8 → const Gray8 Pixel Formats
8-bit grayscale pixel format.
rgb888 → const Rgb888 Pixel Formats
24-bit^1 RGB pixel format with three 8-bit channels.

Properties

system256 IndexedFormat<int> Pixel Formats
A simple 256-color system palette of common RGB colors.
final
system8 IndexedFormat<int> Pixel Formats
A simple 8-color system palette of common RGB colors.
final